package cn.mujiankeji.mbrowser.界面.标签页.视频播放页面

import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import cn.mujiankeji.mbrowser.app.MBrowserApp
import cn.mujiankeji.mbrowser.app.应用接口
import cn.mujiankeji.mbrowser.功能.播放框.播放框视图实现
import cn.mujiankeji.mbrowser.功能.播放框.核心.ExoPlayer
import cn.mujiankeji.mbrowser.功能.播放框.模型.播放内容来源
import cn.mujiankeji.mbrowser.功能.播放框.模型.播放框视图状态
import cn.mujiankeji.mbrowser.数据.配置项.应用配置
import cn.mujiankeji.mbrowser.界面.框架.主视图.标签页状态
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking

class 视频播放页面状态<T>(播放源: 播放内容来源<T>) : 标签页状态() {


    var coroutine : CoroutineScope ?= null
    var 显示播放框 by mutableStateOf(true) // 本页面是否显示播放框（焦点被全屏、画中画抢走时不显示）
    var 播放框 : 播放框视图状态<T> = 播放框视图状态(
        context = MBrowserApp.ctx(),
        player = ExoPlayer(MBrowserApp.ctx()),
        播放源 = 播放源,
        更新视频倍速 = {
            coroutine?.launch {
                应用配置.设置视频默认倍速(it)
            }
        },
        界面状态改变 = { 全屏, 画中画 ->
            if (全屏){
                显示播放框 = false
                应用全屏()
            }
            else if (画中画){
                显示播放框 = false
                应用画中画()
            }
            else{
                应用接口.界面模块().取消全屏()
                显示播放框 = true
            }
        },
        准备就绪 = {
            // todo 寻找记录 -- 自动播放
            播放框准备就绪()
        }
    )

    // 更新默认配置
    init {
        runBlocking {
            播放框.player.设置播放速率(应用配置.读取视频默认倍速().first())
        }

    }
    private fun 应用全屏(){
        应用接口.界面模块().设置全屏视图 {
            播放框视图实现(播放框)
        }
    }
    private fun 应用画中画(){
        应用接口.界面模块().设置画中画({
            播放框.取消画中画()
        }){
            播放框视图实现(播放框)
        }
    }
    override fun 后退(): Boolean {
        if (播放框.全屏模式){
            播放框.取消全屏()
            return true
        }
        else if (播放框.画中画模式){
            播放框.取消画中画()
            return true
        }
        return super.后退()
    }
    private fun 播放框准备就绪(){

    }

    override fun 界面恢复() {
        super.界面恢复()
        播放框.player.播放()
    }

    override fun 界面暂停() {
        super.界面暂停()
        播放框.player.暂停()
    }

    override fun 界面销毁() {
        super.界面销毁()
        播放框.player.释放()
    }


}



